/*
    StringBuffer进行字符串拼接
        1、用加号拼接会在方法区生成大量的新字符串，占用大量的方法区内存
        2、建议使用
            java.lang.StringBuffer
            java.lang.StringBuilder
        3、StringBuffer底层实际上是一个byte[] 数组，往StringBuffer中放字符串，实际上放到byte数组当中去了，初始化容量是16
        4、StringBuffer：方法都有synchronized关键字修饰，表示StringBuffer在多线程环境下运行是安全的
           StringBuilder：没有该关键字

 */

public class StringBufferTest01 {
    public static void main(String[] args) {
        //创建一个初始化容量为16个byte[]数组，字符串缓冲区对象
        StringBuffer stringBuffer = new StringBuffer();


        //拼接字符串，统一用append()方法，即追加
        stringBuffer.append(5);
        stringBuffer.append("爱情");
        System.out.println(stringBuffer);
    }
}

/*
    1、String为什么是不变的？不是局部变量不可变，是说双引号里面的字符串对象一旦创建不可变
        我看过源代码，String类中有一个byte[]数组，这个byte[]数组采用了final修饰，因为数组一旦创建长度不可变，
        并且被final修饰的引用一旦指向某个对象之后，不可再指向其他对象，所以String是不可变的
    2、StringBuffer和StringBuilder为什么是可变的？
        我看过源代码，他俩内部其实是一个byt[]数组，这个数组没有被final修饰，他俩初始化容量是16，存满之后会进
        行扩容，底层调用了数组拷贝的方法，即System.arraycopy()；所以StringBuffer和StringBuilder适用于字符串
        的频繁拼接操作。

 */